Импорт библиотек
library(data.table)
library(word2vec)
library(readr)
library(tm)
library(stringr)
Импорт библиотек для визуализации векторных представлений
library(ggplot2)
library(ggrepel)
library(plotly)
library(umap)
Word2Vec с архитектурой CBOW
Загрузка данных
file_name <-"./processed_text.txt"
text <- read_lines(file_name)
Обучение модели
model = word2vec(x = file_name, type = "cbow", dim = 15, iter = 20)
Вывод “близких слов” по векторному представлению для слова
“это”
cbow_lookslike <- predict(model, c("это"), type = "nearest", top_n = 10)
print(cbow_lookslike)
## $это
## term1 term2 similarity rank
## 1 это этим 0.9415629 1
## 2 это самое 0.9351895 2
## 3 это приложения 0.9344024 3
## 4 это добавлять 0.9298916 4
## 5 это сделано 0.9296594 5
## 6 это делать 0.9275446 6
## 7 это вроде 0.9221837 7
## 8 это develop 0.9202037 8
## 9 это изменения 0.9155055 9
## 10 это блоки 0.9149044 10
Визуализация векторных представлений полученных с помощью Word2Vec с
архитектурой CBOW
corpus <- Corpus(VectorSource(text))
dtm <- DocumentTermMatrix(corpus)
words <- colnames(as.matrix(dtm))
word_list <- strsplit(words, " ")
word_list <- unlist(word_list)
word_list <- word_list[word_list != ""]
embedding <- as.matrix(model)
embedding <- predict(model, word_list, type = "embedding")
embedding <- na.omit(embedding)
vizualization <- umap(embedding, n_neighbors = 15, n_threads = 2)
df <- data.frame(word = rownames(embedding),
xpos = gsub(".+//", "", rownames(embedding)),
x = vizualization$layout[, 1], y = vizualization$layout[, 2],
stringsAsFactors = FALSE)
plot_ly(df, x = ~x, y = ~y, type = "scatter", mode = 'text', text = ~word) %>%
layout(title = "CBOW Embeddings Visualization")
Word2Vec с архитектурой Skip-Gram
Загрузка данных
file_name <-"./processed_text.txt"
text <- read_lines(file_name)
Обучение модели
model = word2vec(x = file_name, type = "skip-gram", dim = 15, iter = 20)
Вывод “близких слов” по векторному представлению для слова
“это”
cbow_lookslike <- predict(model, c("это"), type = "nearest", top_n = 10)
print(cbow_lookslike)
## $это
## term1 term2 similarity rank
## 1 это просто 0.9803271 1
## 2 это можете 0.9760230 2
## 3 это работу 0.9713555 3
## 4 это именно 0.9681293 4
## 5 это однако 0.9617818 5
## 6 это свой 0.9615960 6
## 7 это позволяет 0.9589402 7
## 8 это нужно 0.9580863 8
## 9 это иначе 0.9568923 9
## 10 это придется 0.9567359 10
Визуализация векторных представлений полученных с помощью Word2Vec с
архитектурой Skip-Gram
corpus <- Corpus(VectorSource(text))
dtm <- DocumentTermMatrix(corpus)
words <- colnames(as.matrix(dtm))
word_list <- strsplit(words, " ")
word_list <- unlist(word_list)
word_list <- word_list[word_list != ""]
embedding <- as.matrix(model)
embedding <- predict(model, word_list, type = "embedding")
embedding <- na.omit(embedding)
vizualization <- umap(embedding, n_neighbors = 15, n_threads = 2)
df <- data.frame(word = rownames(embedding),
xpos = gsub(".+//", "", rownames(embedding)),
x = vizualization$layout[, 1], y = vizualization$layout[, 2],
stringsAsFactors = FALSE)
plot_ly(df, x = ~x, y = ~y, type = "scatter", mode = 'text', text = ~word) %>%
layout(title = "Skip-Gram Embeddings Visualization")